package unq.model

import java.util.List
import org.uqbar.commons.utils.Observable
import java.util.ArrayList
import java.util.Collection
import org.uqbar.commons.model.ObservableUtils
import model.AppModel.EditarPaisAPPModel

@Observable
class Pais {
	
	@Property String nombre
	@Property List<String> caracteristicas = new ArrayList
	@Property List<Lugar> lugaresDeInteres = new ArrayList
	@Property List<Pais> conexiones = new ArrayList
	@Property List posiblesConexiones = new ArrayList
	@Property Collection posiblesLugares = #[new Banco, new Biblioteca, new Embajada, new Club]
	@Property String elemEliminar
	@Property String elemAgregar
	@Property Object elem
	@Property Object elemObservado
    
    @Property Juego juego
    new (EditarPaisAPPModel ed){
    	this._nombre = ed.nombre
    	
		ed.lugares.forEach[l|lugaresDeInteres.add(l)]
		ed.conexiones.forEach[c|conexiones.add(c)]
		ed.posiblesConexiones.forEach[c|posiblesConexiones.add(c)]
		ed.caracteristicas.forEach[c|caracteristicas.add(c)]
    }
    
	new() {
	}
	def List<String> nombreConexiones(){
		conexiones.map[pais | pais.getNombre()]
	}
	new(String nomb, List<String> carac) {
		_nombre = nomb
		_caracteristicas = carac

	}
	new(Juego juego) {
		this._juego = juego
		posiblesConexiones = juego.listaPaises
	}
	new(String nomb, List<String> carac, Juego juego) {
		_nombre = nomb
		_caracteristicas = carac
		_juego = juego
		posiblesConexiones = juego.listaPaises
		juego.agregarPais(this)
	}
	def eliminarCaracteristica() {
		this.caracteristicas.remove(this.elemEliminar)
		ObservableUtils.firePropertyChanged(this, "caracteristicas", caracteristicas)
	}
	def agregarCaracteristica() {
		this.caracteristicas.add(this.elemAgregar)
		ObservableUtils.firePropertyChanged(this, "caracteristicas", caracteristicas)
	}
	def eliminarLugar() {
		this.lugaresDeInteres.remove(this.elem as Lugar)
		ObservableUtils.firePropertyChanged(this, "lugaresDeInteres", lugaresDeInteres)
	}
	def agregarLugar() {
		this.lugaresDeInteres.add(this.elemObservado as Lugar)
		ObservableUtils.firePropertyChanged(this, "lugaresDeInteres", lugaresDeInteres)
	}
	def eliminarConexion() {
		this.conexiones.remove(this.elem as Pais)
		ObservableUtils.firePropertyChanged(this, "conexiones", conexiones)
	}
	def agregarConexion() {
		this.conexiones.add(this.elemObservado as Pais)
		ObservableUtils.firePropertyChanged(this, "conexiones", conexiones)
	}

}
